-- @Author: 作者QQ381990860
-- @Date:   2022-09-06 16:40:22
-- @Last Modified by:   作者QQ381990860
-- @Last Modified time: 2022-09-09 20:19:19
-- @Author: 作者QQ381990860
-- @Date:   2021-10-30 19:45:20
-- @Last Modified by:   作者QQ381990860
-- @Last Modified time: 2022-08-26 18:03:55
--======================================================================--
-- @作者: 作者QQ2868780478

代代内挂 = class()

function 代代内挂:初始化()

end

function  代代内挂:更改内挂设置(id,内容)
  --__S服务:输出("更改内挂设置")
  if 玩家数据[id].角色.内挂系统.内挂版本~=2 then
    发送数据(玩家数据[id].连接id, 7, "#y/普通版无法使用高级功能!")
    return
  end
  if 内容.更改=="全自动装备回收" then
    if 玩家数据[id].角色.内挂系统.回收开关 then
      玩家数据[id].角色.内挂系统.回收开关=false
    else
      玩家数据[id].角色.内挂系统.回收开关=true
    end
  elseif 内容.更改=="物品自动存仓库" then
        if 玩家数据[id].角色.内挂系统.物品存放 then
      玩家数据[id].角色.内挂系统.物品存放=false
    else
      玩家数据[id].角色.内挂系统.物品存放=true
    end
  elseif 内容.更改=="银子自动存钱庄" then
        if 玩家数据[id].角色.内挂系统.银子存放 then
      玩家数据[id].角色.内挂系统.银子存放=false
    else
      玩家数据[id].角色.内挂系统.银子存放=true
    end
  elseif 内容.更改=="全自动补充红罗羹" then
        if 玩家数据[id].角色.内挂系统.红罗羹开关 then
      玩家数据[id].角色.内挂系统.红罗羹开关=false
    else
      玩家数据[id].角色.内挂系统.红罗羹开关=true
    end
    elseif 内容.更改=="全自动补充摄妖香" then
        if 玩家数据[id].角色.内挂系统.摄妖香开关 then
      玩家数据[id].角色.内挂系统.摄妖香开关=false
    else
      玩家数据[id].角色.内挂系统.摄妖香开关=true
    end
  elseif 内容.更改=="宠物碎片回收" then
        if 玩家数据[id].角色.回收开关.宠物碎片回收 then
      玩家数据[id].角色.回收开关.宠物碎片回收=false
    else
      玩家数据[id].角色.回收开关.宠物碎片回收=true
    end
  elseif 内容.更改=="要诀回收" then
        if 玩家数据[id].角色.回收开关.魔兽要诀回收 then
      玩家数据[id].角色.回收开关.魔兽要诀回收=false
    else
      玩家数据[id].角色.回收开关.魔兽要诀回收=true
    end
  elseif 内容.更改=="天书回收" then
        if 玩家数据[id].角色.回收开关.天书回收 then
      玩家数据[id].角色.回收开关.天书回收=false
    else
      玩家数据[id].角色.回收开关.天书回收=true
    end
  elseif 内容.更改=="装备回收" then
        if 玩家数据[id].角色.回收开关.装备回收 then
      玩家数据[id].角色.回收开关.装备回收=false
    else
      玩家数据[id].角色.回收开关.装备回收=true
    end
  end
    local 发送信息 ={}
    发送信息.内挂=玩家数据[id].角色.内挂系统
    发送信息.回收设置=玩家数据[id].角色.回收开关
    发送信息.怪物设置={[1]="难度1",[2]="难度2",[3]="难度3",[4]="难度4",[5]="难度5",[6]="难度6",[7]="难度7",[8]="难度8",[9]="难度9"}
    发送数据(玩家数据[id].连接id,1045,发送信息)
end
function  代代内挂:保存内挂状态(id,内容)
  --__S服务:输出("保存内挂状态")
 -- table.print(内容.列表)
  if 内容~=nil and 内容.列表~=nil and 玩家数据[id].角色.内挂系统.内挂版本==1 then
    玩家数据[id].角色.内挂系统.待打列表[1]=内容.列表[1]
    玩家数据[id].角色.内挂系统.待打列表[2]="待设置"
    玩家数据[id].角色.内挂系统.待打列表[3]="待设置"
    发送数据(玩家数据[id].连接id, 7, "#y/普通版只能设置一种怪物")
  else
    玩家数据[id].角色.内挂系统.待打列表=内容.列表
  end
    local 发送信息 ={}
    发送信息.内挂=玩家数据[id].角色.内挂系统
    发送信息.回收设置=玩家数据[id].角色.回收开关
    发送信息.怪物设置={[1]="难度1",[2]="难度2",[3]="难度3",[4]="难度4",[5]="难度5",[6]="难度6",[7]="难度7",[8]="难度8",[9]="难度9"}
    发送数据(玩家数据[id].连接id,1045,发送信息)
end
function  代代内挂:关闭内挂(id)
  --__S服务:输出("关闭内挂")
    玩家数据[id].角色.内挂系统.自动刷怪=false
    local 发送信息 ={}
    发送信息.内挂=玩家数据[id].角色.内挂系统
    发送信息.回收设置=玩家数据[id].角色.回收开关
    发送信息.怪物设置={[1]="难度1",[2]="难度2",[3]="难度3",[4]="难度4",[5]="难度5",[6]="难度6",[7]="难度7",[8]="难度8",[9]="难度9"}
    发送数据(玩家数据[id].连接id,1045,发送信息)
   -- 发送数据(玩家数据[id].连接id, 7, "#y/内挂已经停止")
end
function  代代内挂:获取内挂设置(id)
  --__S服务:输出("获取内挂设置")
  if 玩家数据[id].角色.内挂系统==nil then
      玩家数据[id].角色.内挂系统={自动刷怪=false,待打列表={[1]="待设置",[2]="待设置",[3]="待设置"},战斗地图=1001,回收开关=false,物品存放=false,剩余时间=0,银子存放=false,摄妖香开关=false,红罗羹开关=false,内挂版本=1}
  end
  if self:到期时间判断(id)==false then
    self:关闭内挂(id)
    return
  end
    local 发送信息 ={}
    发送信息.内挂=玩家数据[id].角色.内挂系统
    发送信息.回收设置=玩家数据[id].角色.回收开关
    发送信息.怪物设置={[1]="难度1",[2]="难度2",[3]="难度3",[4]="难度4",[5]="难度5",[6]="难度6",[7]="难度7",[8]="难度8",[9]="难度9"}
    发送数据(玩家数据[id].连接id,1045,发送信息)
end
function  代代内挂:到期时间判断(id)
   --__S服务:输出("到期时间判断")
  if 玩家数据[id].角色.内挂系统.剩余时间<os.time()+0 then
    return false
  end
  return true
end
function  代代内挂:开启自动打怪(id)
   --__S服务:输出("开启自动打怪")
  if  玩家数据[id].角色.内挂系统.自动刷怪==false then
    玩家数据[id].角色.内挂系统.自动刷怪=true
  else
    玩家数据[id].角色.内挂系统.自动刷怪=false
  end
    local 发送信息 ={}
    发送信息.怪物设置={[1]="难度1",[2]="难度2",[3]="难度3",[4]="难度4",[5]="难度5",[6]="难度6",[7]="难度7",[8]="难度8",[9]="难度9"}
    发送信息.内挂=玩家数据[id].角色.内挂系统
    发送信息.回收设置=玩家数据[id].角色.回收开关
    发送数据(玩家数据[id].连接id,1045,发送信息)
end

function  代代内挂:获取当前地图(id)
   --__S服务:输出("获取当前地图")
  if self:到期时间判断(id)==false then
    self:关闭内挂(id)
    return
  end
    local 发送信息 ={}
    发送信息.地图编号=玩家数据[id].角色.地图数据
    发送数据(玩家数据[id].连接id,1046,发送信息)
end
function  代代内挂:跳转地图(id)
  --__S服务:输出("跳转地图")
  local 刷怪地图={}
  local 要打怪物={}
  local 可执行=false
  for n=1,3 do
    if 玩家数据[id].角色.内挂系统.待打列表[n]~="待设置" and 玩家数据[id].角色.内挂系统.自动刷怪 then
       要打怪物[#要打怪物+1]=玩家数据[id].角色.内挂系统.待打列表[n]
    end
  end
  if #要打怪物>=1 then
    for k,v in pairs(RefreshMonsterData) do
        for n=1,#要打怪物 do
          if v.称谓==要打怪物[n] then
               for x=1,#v.地图 do
               刷怪地图[#刷怪地图+1]=v.地图[x]
                end
          end
     end
  end
end
if #刷怪地图>=1 and #要打怪物>=1 then
  可执行=true
end
  if 可执行 then

    local 要去地图=刷怪地图[取随机数(1,#刷怪地图)]
    local 临时坐标=地图处理类:Randomloadtion(要去地图)
    玩家数据[id].角色.内挂系统.战斗地图=要去地图
    地图处理类:跳转处理(id,{要去地图,临时坐标.x*20,临时坐标.y*20},"代代")
    local 发送信息 ={}
    发送信息.地图编号=玩家数据[id].角色.地图数据
    发送信息.要去地图=要去地图
    发送数据(玩家数据[id].连接id,1046,发送信息)
  else
    self:关闭内挂(id)
  end
end
function  代代内挂:获取当前地图怪物(id)
  --__S服务:输出("获取当前地图怪物")
  local 要打怪物={}
  local 可执行=false
  for n=1,3 do
    if 玩家数据[id].角色.内挂系统.待打列表[n]~="待设置" and 玩家数据[id].角色.内挂系统.自动刷怪 then
       要打怪物[#要打怪物+1]=玩家数据[id].角色.内挂系统.待打列表[n]
    end
  end

   local 怪物列表={}
   local 刷怪地图=玩家数据[id].角色.内挂系统.战斗地图
      for k,v in pairs(地图处理类.MapData[刷怪地图].单位组) do
        for x=1,#要打怪物 do
           if 地图处理类.MapData[刷怪地图].单位组[k].称谓==要打怪物[x]  and 地图处理类.MapData[刷怪地图].单位组[k].战斗==false then
              local 临时编号=#怪物列表+1
              怪物列表[临时编号]={}
              怪物列表[临时编号].名称=地图处理类.MapData[刷怪地图].单位组[k].名称
              怪物列表[临时编号].x=地图处理类.MapData[刷怪地图].单位组[k].X
              怪物列表[临时编号].y=地图处理类.MapData[刷怪地图].单位组[k].Y
              怪物列表[临时编号].编号=地图处理类.MapData[刷怪地图].单位组[k].编号

           end
         end
      end
if #要打怪物>=1 and #怪物列表>=1 then
  可执行=true
end
if 可执行 then
  -- table.sort(怪物列表,function(a,b) return a.x<b.x end )
  -- local b={}
  -- for n=1,#怪物列表 do
  --   b[n]=怪物列表[n].x
  -- end
  -- local 玩家现在坐标=math.floor(玩家数据[id].角色.地图数据.x/20)
  -- local 最近的怪物=self:查找接近坐标(b,玩家现在坐标)
  发送数据(玩家数据[id].连接id,1047,怪物列表)
else
  发送数据(玩家数据[id].连接id,1049,"0")
    --self:跳转地图(id)
  end
end
function  代代内挂:查找接近坐标(t,v)
  --__S服务:输出("查找接近坐标")
  local left=1
  local right=table.getn(t)
  local mid=math.ceil((left+right)/2)
  while left ~= mid do
    if t[mid]==v  then
    elseif t[mid]<v then
      left=mid+1
    else
      right=mid-1
    end
    mid=math.ceil((left+right)/2)
  end
return mid
end
function  代代内挂:获取玩家战斗状态(id)
   --__S服务:输出("获取玩家战斗状态")
  local 发送信息={战斗状态=false,其他操作=false}
    if 玩家数据[id].战斗~=0 then
      发送信息.战斗状态=true
    end
    if 玩家数据[id].角色.内挂系统.回收开关 and 发送信息.战斗状态==false  then
       道具处理类:出售全部道具(id,"包裹")
   end

 if 玩家数据[id].角色.内挂系统.物品存放 and 发送信息.战斗状态==false then
      if 角色处理类:取可用道具格子(玩家数据[id],"包裹") ==0 then
        发送信息.其他操作=true
      end
   end
   if 玩家数据[id].角色.内挂系统.红罗羹开关 and 发送信息.战斗状态==false then
    local 秘制红罗羹=角色处理类:GetTaskID(玩家数据[id],"秘制红罗羹")
    if 秘制红罗羹==0 and 任务数据[秘制红罗羹]==nil then
      if 玩家数据[id].角色.道具.货币.银子>200000  then
      任务控制类:添加秘制红罗羹(id)
       --任务控制类:添加摄妖香(id)
      玩家数据[id].角色.道具.货币.银子=玩家数据[id].角色.道具.货币.银子-200000
      发送数据(玩家数据[id].连接id, 7, "#y/自动补充了红罗羹")
      else
        self:关闭内挂(id)
         发送数据(玩家数据[id].连接id, 7, "#y/你没有足够的银子补充红罗羹,内挂已经停止")
        return
      end
    end
  end
  if 玩家数据[id].角色.内挂系统.摄妖香开关 and 发送信息.战斗状态==false then
    local 摄妖香=角色处理类:GetTaskID(玩家数据[id],"摄妖香")
    if 摄妖香==0 and 任务数据[摄妖香]==nil then
      if 玩家数据[id].角色.道具.货币.银子>20000  then

       任务控制类:添加摄妖香(id)
      玩家数据[id].角色.道具.货币.银子=玩家数据[id].角色.道具.货币.银子-20000
      发送数据(玩家数据[id].连接id, 7, "#y/自动补充了摄妖香")
      else
        self:关闭内挂(id)
         发送数据(玩家数据[id].连接id, 7, "#y/你没有足够的银子补充摄妖香,内挂已经停止")
        return
      end
    end
  end

  if 玩家数据[id].角色.内挂系统.银子存放 and 玩家数据[id].角色.道具.货币.银子>50000000 and 发送信息.战斗状态==false then
    local 存入数额=10000000
    玩家数据[id].角色.道具.货币.银子 = 玩家数据[id].角色.道具.货币.银子 - 存入数额
    玩家数据[id].角色.道具.货币.存银 = 玩家数据[id].角色.道具.货币.存银 + 存入数额
    发送数据(玩家数据[id].连接id, 7, "#y/自动存入钱庄"..存入数额)
   end
    发送数据(玩家数据[id].连接id,1048,发送信息)
end

function  代代内挂:清理背包(id)
  --__S服务:输出("清理背包")
    local 仓库编号=self:取可用仓库编号(id)
    if 仓库编号==0 then
      self:关闭内挂(id)
      return
    end
   if 玩家数据[id].角色.内挂系统.回收开关 then
       道具处理类:出售全部道具(id,"包裹")
   end
   if 玩家数据[id].角色.内挂系统.银子存放 and 玩家数据[id].角色.道具.货币.银子>50000000 then
    local 存入数额=10000000
    玩家数据[id].角色.道具.货币.银子 = 玩家数据[id].角色.道具.货币.银子 - 存入数额
    玩家数据[id].角色.道具.货币.存银 = 玩家数据[id].角色.道具.货币.存银 + 存入数额
    发送数据(玩家数据[id].连接id, 7, "#y/自动存入钱庄"..存入数额)
   end
    local 仓库格子=self:取仓库可用格子(id,仓库编号)
    local 需要存放的格子={}
    for a=1,20 do
      if 玩家数据[id].角色.道具.包裹[a]~=nil then
        table.insert(需要存放的格子,a)
      end
    end
      for n=1,20 do
        for b=1,#需要存放的格子 do
          if 仓库格子[n]~=nil and 玩家数据[id].角色.仓库[仓库编号][仓库格子[n]]==nil and 玩家数据[id].角色.道具.包裹[需要存放的格子[b]]~=nil then
          玩家数据[id].角色.仓库[仓库编号][仓库格子[n]]=玩家数据[id].角色.道具.包裹[需要存放的格子[b]]
          玩家数据[id].角色.道具.包裹[需要存放的格子[b]] = nil
        end
      end
     end
     self:获取玩家战斗状态(id)
end
function  代代内挂:取仓库可用格子(id,编号)
  --__S服务:输出("取仓库可用格子")
  local 可用格子={}
    for a = 1, 20 do
       if 玩家数据[id].角色.仓库[编号][a]==nil then
        table.insert(可用格子,a)
       end
    end
  return 可用格子
end

function  代代内挂:取可用仓库编号(id)
  --__S服务:输出("取可用仓库编号")
  local 仓库总数=#玩家数据[id].角色.仓库
  local 可用仓库=0
  for n=1,仓库总数 do
    for a = 1, 20 do
       if 玩家数据[id].角色.仓库[n][a]==nil then
        可用仓库=n
        break
       end
    end
  end
  return 可用仓库
end
function 道具处理类:仓库存放事件(id, 格子, 仓库, 类型)-----------------完成--
  --__S服务:输出("仓库存放事件")
  local 内容 = {
    当前类型 = 类型,
    格子 = 格子,
    仓库 = 仓库
  }
  self.可用格子 = 0

  for n = 1, 20 do
    if 玩家数据[id].角色.仓库[内容.仓库][n] == 玩家数据[id].角色.道具[内容.当前类型][内容.格子] then
      玩家数据[id].角色.道具[内容.当前类型][内容.格子] = nil

      发送数据(玩家数据[id].连接id, 3009, self:索要道具1(id, 内容.当前类型))
      发送数据(玩家数据[id].连接id, 3010, self:索要仓库道具(id, 内容.仓库))
      发送数据(玩家数据[id].连接id, 3006, "66")

      return 0
    end

    if self.可用格子 == 0 and 玩家数据[id].角色.仓库[内容.仓库][n] == nil then
      self.可用格子 = n
    end
  end

  if self.可用格子 == 0 then
    发送数据(玩家数据[id].连接id, 7, "#y/您当前的仓库已经无法存放更多的道具了")

    return 0
  elseif 玩家数据[id].物品[玩家数据[id].角色.道具[内容.当前类型][内容.格子]].Time then
        发送数据(玩家数据[id].连接id, 7, "#y/有效期的道具无法存入仓库")

    return 0
  else
    玩家数据[id].角色.仓库[内容.仓库][self.可用格子] = 玩家数据[id].角色.道具[内容.当前类型][内容.格子]
    玩家数据[id].角色.道具[内容.当前类型][内容.格子] = nil

    发送数据(玩家数据[id].连接id, 3009, self:索要道具1(id, 内容.当前类型))
    发送数据(玩家数据[id].连接id, 3010, self:索要仓库道具(id, 内容.仓库))
    发送数据(玩家数据[id].连接id, 3006, "66")
  end
 end
return 代代内挂